package com.lonely.fx.choice_box;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ChoiceBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.StringConverter;

/**
 * @date: 2022-07-17 17:51
 * @author: ztkj-hzb
 * @description: 对象数据类型 属性设置
 **/
public class ChoiceBoxWithObjectSettingMain extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    /**
     * 需求： 有三个用户，希望在下拉列表中展示格式： name--age
     */
    @Override
    public void start(Stage primaryStage) throws Exception {

        VBox vBox = new VBox();
        ChoiceBox<User> choiceBox = new ChoiceBox<>();

        User user1 = new User().setName("aa").setAge(10);
        User user2 = new User().setName("bb").setAge(20);
        User user3 = new User().setName("cc").setAge(30);
        choiceBox.getItems().addAll(user1,user2,user3);

        choiceBox.getSelectionModel().selectFirst();

        //设置转换器
        choiceBox.setConverter(new StringConverter<User>() {

            /**
             * TODO: 所有展示在下拉的数据都是该方法进行转换的
             * @param object
             * @return
             */
            @Override
            public String toString(User object) {
                System.out.println("11");
                return String.format("%s-%s",object.getName(),object.getAge());
            }

            /**
             * TODO: 该方法不会执行，忽略
             * @param string
             * @return
             */
            @Override
            public User fromString(String string) {
                return null;
            }
        });





        vBox.getChildren().add(choiceBox);
        primaryStage.setScene(new Scene(vBox));
        primaryStage.setWidth(600);
        primaryStage.setHeight(500);
        primaryStage.show();

    }


    /**
     * 用户信息
     */

    private class User {

        /**
         * 用户名
         */
        private String name;

        /**
         * 年龄
         */
        private Integer age;

        public String getName() {
            return name;
        }

        public User setName(String name) {
            this.name = name;
            return this;
        }

        public Integer getAge() {
            return age;
        }

        public User setAge(Integer age) {
            this.age = age;
            return this;
        }
    }


}
